home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
pas
/
swag
/
files.swg
/
0018_Find Data at end of EXE.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-07-16
|
3KB
|
69 lines
===========================================================================
BBS: Canada Remote Systems
Date: 06-24-93 (15:37) Number: 27580
From: ROB PERELMAN Refer#: NONE
To: ALL Recvd: NO
Subj: End of EXE Conf: (1221) F-PASCAL
---------------------------------------------------------------------------
This is a unit I wrote but it crashed a few times on me, so here is an
updated unit for anyone's use. Remember not to use it from the TP
editor because if you compile to memory, PARAMSTR(0) is the editor, and
if you compile to disk, you will not have any data.
Unit ExeEnd;
Interface
Var EndOfExe: LongInt; {Shows the end of the EXE file}
ExeFile: File; {The EXE file positioned at the end}
Data: Boolean; {If there is data after the EXE}
Implementation
Type EXEHeader=Record
ID: Word; { EXE file id }
ByteMod: Word; { Load module image size mod 512 }
Pages: Word; { File size (including header) div 512 }
RelocItems: Word; { Number of relocation table items }
Size: word; { Header size in 16-byte paragraphs }
MinParagraphs: Word; { Minimum number of paragraphs above program }
MaxParagraphs: Word; { Maximum number of paragraphs above program }
StackSeg: Word; { Displacement of stack segment }
SPReg: Word; { Initial SP register value }
CheckSum: Integer; { Word checksum - negative sum (not used) }
IPReg: Word; { Initial IP register value }
CodeSeg: Word; { Displacement of code segment }
FirstReloc: Word; { First relocation item }
OvlN: Word { Overlay number }
End;
Const CorrectExe=$5A4D;
Var Exe: EXEHeader;
ReadIn: Integer;
OldExitProc: Pointer;
Procedure CloseExe; Far;
Begin
ExitProc:=OldExitProc;
Close(ExeFile);
End;
Begin
OldExitProc:=ExitProc;
ExitProc:=@CloseExe;
Assign(ExeFile, ParamStr(0));
Reset(ExeFile, 1);
BlockRead(ExeFile, Exe, SizeOf(Exe), ReadIn);
With Exe do If (ReadIn<>SizeOf(Exe)) or (ID<>CorrectExe) then EndOfExe:=0
Else EndOfExe:=Pages*512+ByteMod-512;
Seek(ExeFile, EndOfExe);
Data:=Not EOF(ExeFile);
End.
* QMPro 1.50 4 * "Call waiting", great if you have two friends
--- WM v3.00/92-0215
* Origin: High Country East, Ramona, CA (619)-789-4391 (1:202/1308.0)